// 定义布尔值
const boo: boolean = true
console.log('boolean', boo) // boolean true
// 定义数字
const num: number = 26
console.log('number', num) // number 26
// 定义字符串
let str: string = 'monkey'
str = '21'
console.log('string', str) // monkey
// 使用字符串模板
const strTem: string = `I am ${num} years old`
console.log('strTem', strTem)
// 数组 
const arr: number[] = [1, 2, 3]
console.log('arr', arr) // arr [ 1, 2, 3 ]
const arr2: Array<number> = [2, 3]
console.log('arr2', arr2) // arr2 [ 2, 3 ]
// 元组
// 声明元组的方式有点特殊
let tuple: [string, number]
// 给元组赋值
tuple = ['1', 1]
console.log('tuple', tuple) // tuple [ '1', 1 ]
// 访问元组中元素
console.log('tuple[0]', tuple[0])

// 枚举类型
enum Color {Red = 2, Green, Blue}
const colorName: string = Color[3]
console.log('colorName', colorName) // colorName Green

// any 类型
let an: any = 4
an = 'lee'
an = true
console.log('an', an) // an true

let anyOb: any = 2
console.log('anyOb.toFixed', anyOb.toFixed(2))
try {
  console.log('anyOb.substr', anyOb.substr(2)) // 运行时报错  
} catch (error) {
  console.log(error)
}
// 创建一个未指定类型的数组
let list: any[] = [1, 2, 'lee']
console.log('Arr any', list) // Arr any [ 1, 2, 'lee' ]

function noReturn (): void {
  console.log('我是一个没有返回值的函数')
}
noReturn() // 我是一个没有返回值的函数
// 将 null 或者 undefined 赋值给其他类型
let o: object = null
console.log('o', o) // null
let n: number = undefined
console.log('n', n) // undefined

// never 类型  待定

// 使用 object 类型更好的表示 Object.creat()这样的 api 不会定义函数  待定

// 类型断言
let someValue: any = 'this is a string'
let strLength = someValue.length
console.log('strLength', strLength) // 16
let strLength2 = (<number[]>someValue).length
try {
  console.log('strLength2', strLength2) // 16
} catch (error) {
  console.log(error)
}


